草庐IT

shell 运算符

全部标签

c++ - 运算符重载 C++, (+, -, *,/etc.) 有没有比复制、替换和粘贴更聪明的方法?

我正在编写一种矩阵库,所以我使用运算符重载为矩阵提供了一个operator+。它看起来像这样。friendmatrixoperator+(constmatrix&Input_1,constmatrix&Input_2){matrixOutput;for(inti=0;i据我测试,它是有效的。现在我也想添加-、/、*运算符,它们的工作原理都是一样的。当然我可以使用复制、替换和粘贴。但这不利于可读性和可维护性。有没有更聪明的解决方案,也许还有一个概念,因为我不知道用谷歌搜索它的概念名称?我刚发现如何重载单个运算符。 最佳答案 您可以使用

c++ - C++11 中的逗号运算符(排序)

标准提到f(a,(t=3,t+2),c);根据我的理解,这将是一个赋值表达式,后跟第二个运算符的表达式。但语法列出它并列:表达式:赋值表达式表达式,赋值表达式WorkingDraft,StandardforProgrammingLanguageC++RevisionN4140(November2014)有人好心向我解释一下我在这里缺少什么吗? 最佳答案 当你看到expression:assignment-expressionexpression,assignment-expression表示有2种可能的表达方式。一种可能性是它只是a

c++ - 二维矩阵和重载运算符()/丑陋的语法

我在我的一个项目中使用二维矩阵。这类似于C++FAQLite中的建议.巧妙的是你可以像这样使用它:intmain(){Matrixm(10,10);m(5,8)=106.15;std::cout现在,我有一个由顶点组成的图,每个顶点都有一个公共(public)(只是为了简化示例)指针,指向上面的二维矩阵。现在我确实有一个非常丑陋的语法来访问它。(*sampleVertex.some2DTable)(0,0)=0;//badsampleVertex.some2DTable->operator()(0,0)=0;//evenworse...可能由于我对运算符重载缺乏经验,我在这里遗漏了一些

c++ - 将调用哪个重载版本的运算符

假设我在一个类中声明了下标运算符char&operator[](intindex);constcharoperator[](intindex)const;在什么情况下调用第二次重载。是否仅通过const对象调用。以下场景会调用哪个版本的operator。constcharres1=nonConstObject[10];nonConstObject[10]; 最佳答案 第一个被调用。不要被返回值弄糊涂了;只有参数被认为是选择方法。在这种情况下,隐式this是非常量,因此调用非常量版本。 关

c++ - 在 C++ 中重载 + 运算符时第一个参数是字符串的问题

我有一个自制的字符串类://String.hString&operator=(constString&);String&operator=(char*);constStringoperator+(String&s);constStringoperator+(char*sA);..//inmain:Strings1("hi");Strings2("hello");str2=str1+"ok";//thisisoktodostr2="ok"+str1;//butnotthisway//Shouldn'titautomaticallydetectthatoneargumentisastrin

C++: union 与按位运算符

我有两个char,我想将它们按位“拼接”在一起。例如:charc1=11;//00001011charc2=5;//00000101shortintsi=stitch(c1,c2);//0000101100000101所以,我首先尝试的是按位运算符:shortintstitch(charc1,charc2){return(c1但这不起作用:我得到一个short等于c2...(1)为什么?(但是:c1和c2在我的真实应用中是负数...也许这是问题的一部分?)所以,我的第二个解决方案是使用union:unionstUnion{struct{charc1;charc2;}shortintsi

c++ - sizeof 运算符的问题

因为我想在函数中动态查找数组大小,所以我使用了sizeof运算符。但是我得到了一些意想不到的结果。这是一个演示程序,向您展示我想做什么。//------------------------------------------------------------------------------------------#includevoidgetSize(int*S1){intS_size=sizeofS1/sizeof(int);std::cout编译命令:g++demo1.cc-odemo1{fedora12}输出:arraysize(infunction):2arraysize

c++ - 128 位数字的位移位运算

假设我有一个由4个32位整数组成的数组,我用它来存储128位数字如何对这个128位数字进行左右移位?谢谢! 最佳答案 使用uint128?如果可以,请使用专为此设计的x86SSE指令。(然后,当您对值进行位移后,就可以进行其他128位操作了……)SSE2移位平均需要4条指令,一个分支(一个case语句)。移动超过32位也没有问题。执行此操作的完整代码是使用gcc内在函数而不是原始汇编程序,位于sseutil.c(github:"UnusualusesofSSE2")中——它比粘贴在这里有意义的大一些。许多人在使用SSE2时遇到的障碍

c++ - 在模板类上重载 << 运算符

我已经为链表中的节点制作了一个模板类,我试图通过重载#includeusingnamespacestd;templateclassNode;templateclassNode{private:voiddeletePointer(NType*p);public:NTypedata;Node*prev,*next;templatestructis_pointer{staticconstboolvalue=false;};templatestructis_pointer{staticconstboolvalue=true;};Node();Node(NTypedata);~Node();};

C++运算符重载和多态性

多态性和运算符重载混合在一起了吗?没有指针就无法实现多态性,如thisanswer中所述。而且你不能像解释的那样用指针重载运算符here.所以真的没有办法做到这一点,对吧? 最佳答案 是的。您没有正确阅读答案。这是一个简短的演示:#includeusingnamespacestd;structX{intvalue;virtualvoidoperator+=(intx){value+=x;}};structY:X{virtualvoidoperator+=(intx){value*=x;}};voiddo_stuff(X&x){x+=